package Leetcode;

/*给定一个非负整数数组 nums ，你最初位于数组的 第一个下标 。

数组中的每个元素代表你在该位置可以跳跃的最大长度。

判断你是否能够到达最后一个下标。*/

public class Leetcode55 {

}

//主要思路是遍历整个数组，并且不断更新所能到达的最远距离，并做出判断（起点判断法）
class Solution1{
	public boolean canjump(int [] nums) {	
		int l = 0;	//设最远跳跃点为0；
		for(int i=0;i<nums.length;i++) {
			if(i<=l) l = Math.max(l, nums[i]+i);	//当最远跳跃点在起跳点之外时，更新起跳点所能到达的最远位置
			else return false;	//若最远跳跃点在起跳点左边时，返回假，因为无法到达该起跳点
		}return true;
	}
}

//跳跃距离判断法
class Solution2{
	public boolean canjump(int [] nums) {
		int l = 0 ;	//最远能跳的距离为l；
		for(int i=0;i<nums.length-1;i++) {
			if(i<=l) l = Math.max(l,nums[i]+i); //更新能跳到的最远距离
			else return false;	//若能跳到的范围小于该起跳点则直接返回错误；
		}if(l<nums.length-1) return false;
		else return true;	//判断所有的点所能到达的最大范围是否小于/大于全程距离
	}
}
